Telegram Group & Telegram Channel
πŸ‘£ Π—Π°Π΄Π°Ρ‡Π° с ΠΏΠΎΠ΄Π²ΠΎΡ…ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ связан с ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ повСдСния Ρ†ΠΈΠΊΠ»ΠΎΠ², Π²Π²Π΅Π΄Π΅Π½Π½Ρ‹ΠΌ Π² Go 1.22 (ΠΈ, соотвСтствСнно, Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌ для Go 1.24).

Π—Π°Π΄Π°Ρ‡Π°: Π§Ρ‚ΠΎ Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ ΠΏΡ€ΠΈ компиляции ΠΈ запускС с использованиСм Go 1.24?


package main

import (
"fmt"
"sync"
"time"
)

func main() {
var wg sync.WaitGroup
count := 3

fmt.Println("Запуск Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½...")
wg.Add(count)

for i := 0; i < count; i++ {
// ЗапускаСм Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρƒ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ
go func() {
defer wg.Done()
// Π˜ΠΌΠΈΡ‚ΠΈΡ€ΡƒΠ΅ΠΌ Π½Π΅Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ
time.Sleep(time.Duration(10) * time.Millisecond)
// Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Ρ†ΠΈΠΊΠ»Π° 'i' Π²Π½ΡƒΡ‚Ρ€ΠΈ Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρ‹
fmt.Printf("Π“ΠΎΡ€ΡƒΡ‚ΠΈΠ½Π° Π²ΠΈΠ΄ΠΈΡ‚ i = %d\n", i)
}()
}

fmt.Println("ОТиданиС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½...")
wg.Wait()
fmt.Println("ВсС Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρ‹ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Ρ‹.")
}



Π Π°Π·Π±ΠΎΡ€:
ΠšΠ»Π°ΡΡΠΈΡ‡Π΅ΡΠΊΠ°Ρ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° (Π΄ΠΎ Go 1.22): Π’ вСрсиях Go Π΄ΠΎ 1.22 сущСствовала извСстная ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° с Π·Π°Ρ…Π²Π°Ρ‚ΠΎΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Ρ†ΠΈΠΊΠ»Π° Π² замыканиях (функциях, создаваСмых Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ†ΠΈΠΊΠ»Π°, ΠΊΠ°ΠΊ наша анонимная Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½Π°). ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ i Π±Ρ‹Π»Π° ΠΎΠ΄Π½Π° Π½Π° вСсь Ρ†ΠΈΠΊΠ».

Когда Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρ‹ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ Π½Π°Ρ‡ΠΈΠ½Π°Π»ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ (послС нСбольшой Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ time.Sleep), Ρ†ΠΈΠΊΠ» for, скорСС всСго, ΡƒΠΆΠ΅ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π»ΡΡ. К этому ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρƒ пСрСмСнная i ΠΈΠΌΠ΅Π»Π° Π±Ρ‹ своС ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ (Π² Π΄Π°Π½Π½ΠΎΠΌ случаС 3, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ρ†ΠΈΠΊΠ» Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ, ΠΊΠΎΠ³Π΄Π° i становится Ρ€Π°Π²Π½Ρ‹ΠΌ count).

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π² старых вСрсиях Go этот ΠΊΠΎΠ΄, скорСС всСго, Π²Ρ‹Π²Π΅Π» Π±Ρ‹:
Запуск Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½...
ОТиданиС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½...
Π“ΠΎΡ€ΡƒΡ‚ΠΈΠ½Π° Π²ΠΈΠ΄ΠΈΡ‚ i = 3
Π“ΠΎΡ€ΡƒΡ‚ΠΈΠ½Π° Π²ΠΈΠ΄ΠΈΡ‚ i = 3
Π“ΠΎΡ€ΡƒΡ‚ΠΈΠ½Π° Π²ΠΈΠ΄ΠΈΡ‚ i = 3

ВсС Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρ‹ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Ρ‹.

(ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ строк "Π“ΠΎΡ€ΡƒΡ‚ΠΈΠ½Π° Π²ΠΈΠ΄ΠΈΡ‚..." ΠΌΠΎΠ³ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹ΠΌ). Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±ΠΎΠΉΡ‚ΠΈ это, Ρ€Π°Π½ΡŒΡˆΠ΅ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ Π΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ: i := i Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ†ΠΈΠΊΠ»Π° ΠΏΠ΅Ρ€Π΅Π΄ запуском Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ копию ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ.

НовоС ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ (Go 1.22 ΠΈ Π½ΠΎΠ²Π΅Π΅, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ 1.24): Начиная с Go 1.22, сСмантика ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Ρ†ΠΈΠΊΠ»Π° for Π±Ρ‹Π»Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π° для прСдотвращСния этой распространСнной ошибки. Π’Π΅ΠΏΠ΅Ρ€ΡŒ пСрСмСнная Ρ†ΠΈΠΊΠ»Π° (i Π² нашСм случаС) пСрСсоздаСтся для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ.

Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ каТдая Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½Π° Π·Π°Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ свою ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ копию i, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚ этой ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ.

ΠžΠΆΠΈΠ΄Π°Π΅ΠΌΡ‹ΠΉ Π²Ρ‹Π²ΠΎΠ΄ (Go 1.24): Благодаря измСнСнию Π² Go 1.22, каТдая Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½Π° Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ Π²ΠΈΠ΄ΠΈΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ i Ρ‚ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΎΠ½Π° Π±Ρ‹Π»Π° Π·Π°ΠΏΡƒΡ‰Π΅Π½Π°. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π²Ρ‹Π²ΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ (порядок строк "Π“ΠΎΡ€ΡƒΡ‚ΠΈΠ½Π° Π²ΠΈΠ΄ΠΈΡ‚..." ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π°Ρ€ΡŒΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΈΠ·-Π·Π° Π½Π΅Π΄Π΅Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ планирования Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½):
Запуск Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½...
ОТиданиС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½...
Π“ΠΎΡ€ΡƒΡ‚ΠΈΠ½Π° Π²ΠΈΠ΄ΠΈΡ‚ i = 0
Π“ΠΎΡ€ΡƒΡ‚ΠΈΠ½Π° Π²ΠΈΠ΄ΠΈΡ‚ i = 1
Π“ΠΎΡ€ΡƒΡ‚ΠΈΠ½Π° Π²ΠΈΠ΄ΠΈΡ‚ i = 2
ВсС Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρ‹ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Ρ‹.
Use code with caution.
Или, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:
Запуск Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½...
ОТиданиС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½...
Π“ΠΎΡ€ΡƒΡ‚ΠΈΠ½Π° Π²ΠΈΠ΄ΠΈΡ‚ i = 2
Π“ΠΎΡ€ΡƒΡ‚ΠΈΠ½Π° Π²ΠΈΠ΄ΠΈΡ‚ i = 0
Π“ΠΎΡ€ΡƒΡ‚ΠΈΠ½Π° Π²ΠΈΠ΄ΠΈΡ‚ i = 1
ВсС Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρ‹ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Ρ‹.


ΠŸΠΎΠ΄Π²ΠΎΡ… Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ΄ выглядит ΠΊΠ°ΠΊ классичСский ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ошибки Π·Π°Ρ…Π²Π°Ρ‚Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ†ΠΈΠΊΠ»Π°, Π½ΠΎ ΠΈΠ·-Π·Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² языкС начиная с Go 1.22, ΠΎΠ½ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ "ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ" Π±Π΅Π· нСобходимости явного копирования ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ (i := i).
Please open Telegram to view this post
VIEW IN TELEGRAM



tg-me.com/golangtests/764
Create:
Last Update:

πŸ‘£ Π—Π°Π΄Π°Ρ‡Π° с ΠΏΠΎΠ΄Π²ΠΎΡ…ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ связан с ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ повСдСния Ρ†ΠΈΠΊΠ»ΠΎΠ², Π²Π²Π΅Π΄Π΅Π½Π½Ρ‹ΠΌ Π² Go 1.22 (ΠΈ, соотвСтствСнно, Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌ для Go 1.24).

Π—Π°Π΄Π°Ρ‡Π°: Π§Ρ‚ΠΎ Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ ΠΏΡ€ΠΈ компиляции ΠΈ запускС с использованиСм Go 1.24?


package main

import (
"fmt"
"sync"
"time"
)

func main() {
var wg sync.WaitGroup
count := 3

fmt.Println("Запуск Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½...")
wg.Add(count)

for i := 0; i < count; i++ {
// ЗапускаСм Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρƒ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ
go func() {
defer wg.Done()
// Π˜ΠΌΠΈΡ‚ΠΈΡ€ΡƒΠ΅ΠΌ Π½Π΅Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ
time.Sleep(time.Duration(10) * time.Millisecond)
// Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Ρ†ΠΈΠΊΠ»Π° 'i' Π²Π½ΡƒΡ‚Ρ€ΠΈ Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρ‹
fmt.Printf("Π“ΠΎΡ€ΡƒΡ‚ΠΈΠ½Π° Π²ΠΈΠ΄ΠΈΡ‚ i = %d\n", i)
}()
}

fmt.Println("ОТиданиС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½...")
wg.Wait()
fmt.Println("ВсС Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρ‹ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Ρ‹.")
}



Π Π°Π·Π±ΠΎΡ€:
ΠšΠ»Π°ΡΡΠΈΡ‡Π΅ΡΠΊΠ°Ρ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° (Π΄ΠΎ Go 1.22): Π’ вСрсиях Go Π΄ΠΎ 1.22 сущСствовала извСстная ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° с Π·Π°Ρ…Π²Π°Ρ‚ΠΎΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Ρ†ΠΈΠΊΠ»Π° Π² замыканиях (функциях, создаваСмых Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ†ΠΈΠΊΠ»Π°, ΠΊΠ°ΠΊ наша анонимная Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½Π°). ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ i Π±Ρ‹Π»Π° ΠΎΠ΄Π½Π° Π½Π° вСсь Ρ†ΠΈΠΊΠ».

Когда Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρ‹ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ Π½Π°Ρ‡ΠΈΠ½Π°Π»ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ (послС нСбольшой Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ time.Sleep), Ρ†ΠΈΠΊΠ» for, скорСС всСго, ΡƒΠΆΠ΅ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π»ΡΡ. К этому ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρƒ пСрСмСнная i ΠΈΠΌΠ΅Π»Π° Π±Ρ‹ своС ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ (Π² Π΄Π°Π½Π½ΠΎΠΌ случаС 3, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ρ†ΠΈΠΊΠ» Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ, ΠΊΠΎΠ³Π΄Π° i становится Ρ€Π°Π²Π½Ρ‹ΠΌ count).

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π² старых вСрсиях Go этот ΠΊΠΎΠ΄, скорСС всСго, Π²Ρ‹Π²Π΅Π» Π±Ρ‹:
Запуск Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½...
ОТиданиС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½...
Π“ΠΎΡ€ΡƒΡ‚ΠΈΠ½Π° Π²ΠΈΠ΄ΠΈΡ‚ i = 3
Π“ΠΎΡ€ΡƒΡ‚ΠΈΠ½Π° Π²ΠΈΠ΄ΠΈΡ‚ i = 3
Π“ΠΎΡ€ΡƒΡ‚ΠΈΠ½Π° Π²ΠΈΠ΄ΠΈΡ‚ i = 3

ВсС Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρ‹ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Ρ‹.

(ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ строк "Π“ΠΎΡ€ΡƒΡ‚ΠΈΠ½Π° Π²ΠΈΠ΄ΠΈΡ‚..." ΠΌΠΎΠ³ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹ΠΌ). Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±ΠΎΠΉΡ‚ΠΈ это, Ρ€Π°Π½ΡŒΡˆΠ΅ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ Π΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ: i := i Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ†ΠΈΠΊΠ»Π° ΠΏΠ΅Ρ€Π΅Π΄ запуском Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ копию ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ.

НовоС ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ (Go 1.22 ΠΈ Π½ΠΎΠ²Π΅Π΅, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ 1.24): Начиная с Go 1.22, сСмантика ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Ρ†ΠΈΠΊΠ»Π° for Π±Ρ‹Π»Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π° для прСдотвращСния этой распространСнной ошибки. Π’Π΅ΠΏΠ΅Ρ€ΡŒ пСрСмСнная Ρ†ΠΈΠΊΠ»Π° (i Π² нашСм случаС) пСрСсоздаСтся для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ.

Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ каТдая Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½Π° Π·Π°Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ свою ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ копию i, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚ этой ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ.

ΠžΠΆΠΈΠ΄Π°Π΅ΠΌΡ‹ΠΉ Π²Ρ‹Π²ΠΎΠ΄ (Go 1.24): Благодаря измСнСнию Π² Go 1.22, каТдая Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½Π° Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ Π²ΠΈΠ΄ΠΈΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ i Ρ‚ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΎΠ½Π° Π±Ρ‹Π»Π° Π·Π°ΠΏΡƒΡ‰Π΅Π½Π°. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π²Ρ‹Π²ΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ (порядок строк "Π“ΠΎΡ€ΡƒΡ‚ΠΈΠ½Π° Π²ΠΈΠ΄ΠΈΡ‚..." ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π°Ρ€ΡŒΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΈΠ·-Π·Π° Π½Π΅Π΄Π΅Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ планирования Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½):
Запуск Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½...
ОТиданиС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½...
Π“ΠΎΡ€ΡƒΡ‚ΠΈΠ½Π° Π²ΠΈΠ΄ΠΈΡ‚ i = 0
Π“ΠΎΡ€ΡƒΡ‚ΠΈΠ½Π° Π²ΠΈΠ΄ΠΈΡ‚ i = 1
Π“ΠΎΡ€ΡƒΡ‚ΠΈΠ½Π° Π²ΠΈΠ΄ΠΈΡ‚ i = 2
ВсС Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρ‹ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Ρ‹.
Use code with caution.
Или, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:
Запуск Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½...
ОТиданиС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½...
Π“ΠΎΡ€ΡƒΡ‚ΠΈΠ½Π° Π²ΠΈΠ΄ΠΈΡ‚ i = 2
Π“ΠΎΡ€ΡƒΡ‚ΠΈΠ½Π° Π²ΠΈΠ΄ΠΈΡ‚ i = 0
Π“ΠΎΡ€ΡƒΡ‚ΠΈΠ½Π° Π²ΠΈΠ΄ΠΈΡ‚ i = 1
ВсС Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρ‹ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Ρ‹.


ΠŸΠΎΠ΄Π²ΠΎΡ… Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ΄ выглядит ΠΊΠ°ΠΊ классичСский ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ошибки Π·Π°Ρ…Π²Π°Ρ‚Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ†ΠΈΠΊΠ»Π°, Π½ΠΎ ΠΈΠ·-Π·Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² языкС начиная с Go 1.22, ΠΎΠ½ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ "ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ" Π±Π΅Π· нСобходимости явного копирования ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ (i := i).

BY Go tests


Warning: Undefined variable $i in /var/www/tg-me/post.php on line 283

Share with your friend now:
tg-me.com/golangtests/764

View MORE
Open in Telegram


Go tests Telegram | DID YOU KNOW?

Date: |

The seemingly negative pandemic effects and resource/product shortages are encouraging and allowing organizations to innovate and change.The news of cash-rich organizations getting ready for the post-Covid growth economy is a sign of more than capital spending plans. Cash provides a cushion for risk-taking and a tool for growth.

NEWS: Telegram supports Facetime video calls NOW!

Secure video calling is in high demand. As an alternative to Zoom, many people are using end-to-end encrypted apps such as WhatsApp, FaceTime or Signal to speak to friends and family face-to-face since coronavirus lockdowns started to take place across the world. There’s another optionβ€”secure communications app Telegram just added video calling to its feature set, available on both iOS and Android. The new feature is also super secureβ€”like Signal and WhatsApp and unlike Zoom (yet), video calls will be end-to-end encrypted.

Go tests from jp


Telegram Go tests
FROM USA